#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>
using namespace std;
void  Runchild()
{
      int cnt=3;
      while(cnt--)
      {
          printf("我是一个子进程：pid:%d ppid:%d\n",getpid(),getppid());
          sleep(1);
      }
      //exit(10);
}
int main()
{
    //for(int i=0;i<10;i++)
    //{
    //    pid_t id=fork();
    //    if(id==0)
    //    {
    //       Runchild();
    //       exit(i);
    //    }
    //    printf("我是父进程：pid:%d ppid:%d\n",getpid(),getppid());
    //    sleep(1);
    //}
    //sleep(5);
    //for(int i=0;i<10;i++)
    //{
    //    //pid_t id=wait(NULL);
    //    int status=0;
    //    pid_t id=waitpid(-1,&status,0);
    //    printf("wait %d success exit:%d\n",i,WEXITSTATUS(status));
    //}
  
    pid_t id=fork();
    if(id<0)
    {
       perror("fork");
       return -1;
    }
    else if(id==0)
    {
       Runchild();  
    }
    else 
    {
       int status=0;
       while(1)//轮询
       {
         int ret=waitpid(id,&status,WNOHANG);
         if(ret>0)
         {
            if(WIFEXITED(status))
            {
                printf("程序正常 退出码：%d\n",WEXITSTATUS(status));
            }   
            else
            {
                printf("程序异常\n");
                break;
            }
 	   
         } 
         else if(ret==0)
         {
            printf("wait---\n");
            usleep(60000);
         }
 	       else
         {
  	      printf("waitfailed\n");
 	        break;
 	       }
       }
    }
    return 23;
}
